package com.codefactory.generator.service;

import com.codefactory.generator.utils.FreemarkerUtil;
import freemarker.template.Configuration;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;

@Service
public class CodeGenerator {
    @Autowired
    private Configuration configuration;

    /**
     * 根据模板生成代码文件
     *
     * @param ftlFile    模板文件
     * @param outputFile 输出文件
     * @param dataModel  模板数据模型
     * @throws Exception
     */
    public void generateCodeToFile(File ftlFile, File outputFile, Object dataModel) throws Exception {
        if (!ftlFile.exists()) throw new Exception("模板不存在：" + ftlFile);
        String templateString = FileUtils.readFileToString(ftlFile, "UTF-8");
        FreemarkerUtil.processToFile(ftlFile.getName(), templateString, outputFile, dataModel);
    }

    /**
     * 根据模板文件生成代码字符串
     *
     * @param ftlFile   模板文件
     * @param dataModel 模板数据模型
     * @return
     * @throws Exception
     */
    public String generateCodeToString(File ftlFile, Object dataModel) throws Exception {
        if (!ftlFile.exists()) throw new Exception("模板不存在：" + ftlFile);
        String templateString = FileUtils.readFileToString(ftlFile, "UTF-8");
        String result = FreemarkerUtil.processToString(ftlFile.getName(), templateString, dataModel);
        return result;
    }

    /**
     * 根据字符串模板生成代码字符串
     *
     * @param templateString 字符串模板
     * @param dataModel
     * @return
     * @throws Exception
     */
    public String generateCodeToString(String templateString, Object dataModel) throws Exception {
        String result = FreemarkerUtil.processToString(null, templateString, dataModel);
        return result;
    }

    public String generateCodeToString(String templateName, String templateString, Object dataModel) throws Exception {
        String result = FreemarkerUtil.processToString(templateName, templateString, dataModel);
        return result;
    }
}
